<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /*
            事件循环:
                - (1)所有同步任务在主线程上执行，形成一个执行栈
                - (2）主线程之外，还存在一个"任务队列"(task queue)。只要异步任务(setInterva1,setTimeout，i/o...)有了结果，就在"任务队列"之中放置一个事件。
                - (3)一旦"执行栈"中的所有同步任务执行完毕，系统就会读取"任务队列"，拿到队列的第一个任务，进入执行栈，开始执行。
                - (4）主线程不断重复上面的(3)。
                主线程从"任务队列"中读取事件，这个过程是循环不断的，所以整个的这种运行机制又称为Event Loop(事件循环)
        */ 

        // 考虑下面代码, 答案: 111,333,222; 因为111和222的打印是同步任务，会在主线程先执行，222的打印被放在了任务队列中，即使延时是0，也依然会排在333的打印之后。
        console.log(111);
        setTimeout(() => {
            console.log(222);
        }, 0);
        console.log(333);
    </script>
</body>
</html>